package com.samp.base.map;

import com.samp.solr.file2solr.ErrorIntentionExtract;
import com.samp.util.MapUtils;
import org.jcodings.util.Hash;

import java.util.*;

public class TreeMapDemo {

    /**
     * TreeMap实现的SortedMap接口，用来作为排序的Map最适合。
     * 排序是以key来排序的，可以用descendingMap来降序，所以Map按值排序比较简单。
     * @throws Exception
     */
    private static void sortedByKey() throws Exception{
        SortedMap<String, Integer> sortedMap = new TreeMap<>();
        sortedMap.put("a", 5);
        sortedMap.put("e", 1);
        sortedMap.put("g", 0);
        sortedMap.put("c", -1);
        sortedMap.put("j", 4);
        System.out.println(sortedMap);
        sortedMap = ((TreeMap<String, Integer>) sortedMap).descendingMap();
        System.out.println(sortedMap);
        SortedMap<Integer, String > integerMap = new TreeMap<>();
        integerMap.put(5,"g");
        integerMap.put(1,"h");
        integerMap.put(6,"j");
        integerMap.put(0,"k");
        System.out.println(integerMap);
    }

    /**
     * 按value来排序要麻烦点，方法是先将value放入list来排序，然后将排序完后结果转换居LinkedHashMap,之所以用LinkedHashMap,就是为
     * 了保存排序结果。
     * @throws Exception
     */
    private static void sortedByValue() throws Exception{
        Map<String, Integer> sortedMap = new HashMap<>();
        sortedMap.put("a", 5);
        sortedMap.put("e", 1);
        sortedMap.put("g", 0);
        sortedMap.put("c", -1);
        sortedMap.put("j", 4);
        sortedMap = MapUtils.sortedByValue(sortedMap);
        System.out.println(sortedMap);
        //循环输出排序结果
        Iterator iter = sortedMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            Object key = entry.getKey();
            Object val = entry.getValue();
            System.out.println(key+":"+val);
        }
    }



    public static void main(String[] args) {
        try {
//            sortedByKey();
            sortedByValue();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
